package com.itfenghuang.day02;

public class A02_Extends {
    public static void main(String[] args) {

//    1.父子类中的成员成员之间的关系
//            1)成员方法
//                方法名不同的时候
//                方法名相同的时候
//                    重写:在继承关系下,子类对父类的一个重写实现
//                        方法名,参数列表,返回值类型都相同,访问修饰符只能扩大相同
//                    重载:在当前类中,多个方法名相同,参数列表不同(类型,个数),与返回值无关
//                        (面试题:重载和重写的区别)
//            2)构造方法
//     2.什么时候使用继承中?
//                只有当两个类是  is a的关系的时候才可以使用继承
//                注:我们不能够仅仅是为了获取某个功能就随意继承某个类
//                        要慎用继承
//     3.父类中所有的成员子类都可以使用吗?
//                被private修饰的成员不能够被使用,但是被子类继承
//     4.this和super关键字
//            1)什么是this
//                    指代本类对象的引用
//            2)怎么使用?
//                    调用成员变量    格式:  this.属性名
//                    调用方法:    调用构造方法   格式:this(实参);  必须是在有效代码的第一行
//            3)什么是super
//                    父类存储空间的标识(可以理解为父类对象的引用)
//            4)怎么使用?
//                    和this的用法类似,可以调用成员变量,成员方法,构造方法
//                    调用成员变量名:   格式    super.成员变量
//                    调用方法:super.成员方法     一般不会这么用
//            5)this和super调用构造方法的注意事项
//                    1.this()和super()必须写在构造方法中
//                    2.必须在有效代码的第一行
//            6)this和super的区别
//                    1.都能干什么
//                    2.注意事项
//            7)在java中子类会默认自动调用父类的空参构造,如果在父类中声明了带参构造方法
//            8)如果子类构造方法没有调用自己的其他构造,那么默认它会调用自己的空参构造
//                如果子类构造方法调用了自己的其他构造,最终一定会有一个构造方法调用父类的构造方法
//      5.final(最终的最后的不可变的)关键字
//                    修饰符,修饰类,方法,变量
//            1)修饰类
//                    1.格式:final class 类名{}
//                    2.作用:不能够继承
//            2)修饰方法
//                    1.格式 : public final void方法名(实参){}
//                    2.作用:被final修饰的方法不能重写
//            3)修饰变量
//                    1.局部变量:方法类的
//                            被final修饰变量称为常量,不能再次被赋值          常量的命名规范  全部大写
//                    2.成员变量(全局变量):类内部方法之外的
//                            被final修饰变量称为常量,不能再次被赋值
//        Zi t = new Zi();
//        t.show1();
//        t.show();

       final int  num = 20;//局部变量
        final int n1;
        n1=10;
//        n1=20;
       int a =10;
       a=20;
//       num=10;
        System.out.println(num);
    }

}
class Fu{
    public  int num=10;

    public Fu() {
    }

    public Fu(int num) {
        System.out.println("父类构造方法");
        this.num=num;
    }

    public void show(){
        System.out.println("biubiubiu");
    }
}
class Zi extends  Fu{
    private int age;
    private String name;
    public void show1(){
        System.out.println("mimimi");
    }
    public void print(){
        show();
        show1();
    }

    public Zi() {
    }

    public Zi(int age, String name) {
        this.age = age;
        this.name = name;

    }

    public Zi(int num, int age, String name) {
        super(num);
        this.age = age;
        this.name = name;
    }
}
class Yy{
    private String name;
    private int age;

    public Yy() {
       this("嚣张",18);
        System.out.println(name+age);
    }

    public Yy(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
//测试final修饰类
//final class A{
//
//}
//class B extends A{
//
//}
//测试final修饰类
class C{
    public final void show(){
        System.out.println("阿炳");
    }
}
class D extends C{
  //  @Override
  //  public void show() {
 //       System.out.println("阿白");
   // }
}